CentOS 7 下使用iptables

        系统升级到CentOS 7后总感觉iptables怪怪的,比如不管怎么保存重启后都被初始化一下,即便启动时候加命令:

        首先iptables-save > /etc/iptables.rules保存当前状态。

1
[root@openstack1 ~]# iptables-save > /etc/iptables.rules

        然后再在/etc/rc.local中强制加上

1
iptables-restore/etc/iptables.rules

        重启后虽然规则生效但仔细看规则还是一些被莫名添加的额外的内容,让人很是不爽。

        仔细一google,发现问题之所在了。RedHat在7中更改了系统软件,不再使用iptables作为系统的防火墙,而是使用了FirewallD,但是为了兼容过去的命令也可以使用iptables来设置防护规则,但启动的时候自搞了一套。

        解决方法也很简单:

        首先,可以考虑follow官方的想法转用FirewallD 。其实查看一些官方文档也能用。

        但是,个人觉得若没有显著的提升也可以继续使用原来的iptables.若打算继续使用iptables,可以继续做如下:

        备份当前规则

1
[root@openstack1 ~]# iptables-save > iptables.rules

        禁用FireWallD,安装&启用iptables-services

1
2
3
4
5
[root@openstack1 ~]# systemctl stop firewalld
[root@openstack1 ~]# systemctl mask firewalld
Created symlink from /etc/systemd/system/firewalld.service to /dev/null.
[root@openstack1 ~]# yum install -y iptables-services
[root@openstack1 ~]# systemctl enable iptables

        mask是比disable 更强劲的禁用

        为了让/etc/init.d/iptables save 这条命令生效,需要这么做

1
[root@openstack1 ~]# cp /usr/libexec/iptables/iptables.init /etc/init.d/iptables

        而chkconfig iptables 命令会自动重定向到sytemctl enable iptables

1
[root@openstack1 ~]# chkconfig ipatbles

        这时候检查iptables发现规则被清空了

1
2
3
4
5
6
7
8
9
[root@openstack1 ~]# iptables -nxL
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination

        将备份的规则还原

1
[root@openstack1 ~]# iptables-restore iptables.rules

        保存当前规则

1
2
[root@openstack1 ~]# /usr/libexec/iptables/iptables.init save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[ 确定 ]

        若使用minimize版本的安装,可能会出现提示

1
iptables: Saving firewall rules to /etc/sysconfig/iptables: /etc/init.d/iptables: line 274: restorecon: command not found

        这是因为selinux没有安装的缘故,缺少一个组件。安装policycoreutils即可。

1
[root@openstack1 ~]# yum install -y policycoreutils